package com.cy.pj.notice.service.impl;

import com.cy.pj.common.exception.DeleteException;
import com.cy.pj.common.exception.ServiceException;
import com.cy.pj.notice.dao.SysNoticeDao;
import com.cy.pj.notice.pojo.SysNotice;
import com.cy.pj.notice.service.SysNoticeService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.List;

/**
 * 公告业务的具体实现
 * 1)核心业务（调用数据层方法，操作数据）
 * 2)拓展业务（日志记录，权限控制，事务控制，缓存...）
 */

//@Component // 一般组件。
@Service    // 表示一个业务层对象。spring的一个bean
public class SysNoticeServiceImpl implements SysNoticeService {
    // 初始化日志对象（org.slf4j.Logger）
    private static final Logger log =
            LoggerFactory.getLogger(SysNoticeServiceImpl.class);

    //@Autowired    // 注解注入或构造方法注入或set方法
    private SysNoticeDao sysNoticeDao;
    // 通过构造方法直接进行DI操作
    // sprig对该实现类初始化时，找不到无参构造，
    // 就找含参构造，并从bean池中找对象作为实参传递给形参，
    // 找不到就报错，找到多个就匹配名字
    public SysNoticeServiceImpl(SysNoticeDao sysNoticeDao){
        this.sysNoticeDao = sysNoticeDao;
    }

    @Override
    public List<SysNotice> selectNotices(SysNotice notice) throws IOException {
        long t1 = System.currentTimeMillis();
        log.info("method start {}",t1);
        List<SysNotice> list = sysNoticeDao.selectNotices(notice);
        long t2 = System.currentTimeMillis();
        log.info("method end {}",t2);
        return list;
    }

    @Override
    public int deleteNotice(Long... id) {
        int row = sysNoticeDao.deleteNotice(id);
        if (row == 0) {
//            throw new RuntimeException("记录可能已经不存在了");
            throw new DeleteException("记录可能已经不存在了");
        }
        return row;
    }

    @Override
    public int insertNotice(SysNotice notice) {
        int row = sysNoticeDao.insertNotice(notice);
        return row;
    }

    @Override
    public SysNotice selectById(Long id) {
        SysNotice notice = sysNoticeDao.selectById(id);
        if(notice == null){
            throw new ServiceException("记录可能已经不存在了");
        }
        return notice;
    }

    @Override
    public int updateNotice(SysNotice notice) {
        int row = sysNoticeDao.updateNotice(notice);
        return row;
    }
}
